export interface CaptchaRenderData {
    /**
     * 唯一ID.
     */
    id: string;
    /**
     * 验证码类型.
     */
    type: 'SLIDER' | 'ROTATE' | 'CONCAT' | 'WORD_IMAGE_CLICK';

    /**
     * 背景图.
     */
    backgroundImage: string;

    /**
     * 移动图.
     */
    templateImage: string;

    /**
     * 背景图片所属标签.
     */
    backgroundImageTag: string;

    /**
     * 模板图片所属标签.
     */
    templateImageTag: string;

    /**
     * 背景图片宽度.
     */
    backgroundImageWidth: number;

    /**
     * 背景图片高度.
     */
    backgroundImageHeight: number;

    /**
     * 滑动图片宽度.
     */
    templateImageWidth: number;

    /**
     * 滑动图片高度.
     */
    templateImageHeight: number;

    /**
     * data 扩展数据.
     */
    data?: any;

    /**
     * 标签
     */
    tag: string;

    /**
     * 容器背景图
     */
    boxBackgroundImage: string;

    /**
     * 滑块按钮图
     */
    sliderButtonImage: string;

    /**
     * logo图
     */
    logoImage: string;

    /**
     * loading图
     */
    loadingImage: string;
}

export interface CaptchaMatchingData {
    id: string;
    data: MatchingData;
}

interface MatchingData {
    /**
     * 背景图片宽度
     */
    bgImageWidth: number;

    /**
     * 背景图片高度
     */
    bgImageHeight: number;

    /**
     * 滑块图片宽度
     */
    sliderImageWidth: number;

    /**
     * 滑块图片高度
     */
    sliderImageHeight: number;

    /**
     * 轨迹点列表
     */
    trackList: CaptchaTrack[];


    /**
     * 开始滑动时间
     * 格式: yyyy-MM-dd HH:mm:ss.SSS
     * 时区: GMT+8
     */
    startSlidingTime: string;
    /**
     * 轨迹点扩展数据
     */
    data?: any;

    /**
     * 结束滑动时间
     * 格式: yyyy-MM-dd HH:mm:ss.SSS
     * 时区: GMT+8
     */
    endSlidingTime: string;
}

export interface CaptchaTrack {
    /**
     * 轨迹点X坐标
     */
    x: number;

    /**
     * 轨迹点Y坐标
     */
    y: number;
    /**
     * 轨迹点时间
     */
    t: number;
    /**
     * 轨迹点类型
     */
    type: 'move' | 'down' | 'up' | 'click';
}

export interface CaptchaProps {
    /**
     * 缩放比例
     */
    scale: number
    /**
     * 加载动画
     * ['slide', 'bounce', 'fade', 'lightSpeed', 'zoom']
     */
    loadingAnimation?: 'slide' | 'bounce' | 'fade' | 'lightSpeed' | 'zoom'
    /**
     * 渲染数据api
     */
    renderDataApi: () => Promise<CaptchaRenderData>

    matchingResultCodeProps?: {
        /**
         * 已失效
         */
        expired: number | string
        /**
         * 验证错误
         */
        failed: number | string
        /**
         * 验证成功
         */
        success: number | string

    }
    /**
     * 背景图
     */
    backgroundImage?: string
    /**
     * 是否显示关闭按钮
     */
    showClose: boolean
}

export interface ClickDataItem {
    count: number;
    left: number | string;
    top: number | string;
}

export interface ConfigProviderProps {
    locale: string;
    theme: 'light' | 'dark' | string;
}

import Captcha from './components/captcha/index.vue'
import ConfigProvider from './components/config-provider/index.vue'
import langs from './locale'
import {createI18n} from 'vue-i18n'

const i18n = createI18n({
    locale: 'zh_cn',
    messages: {
        zh_cn: langs.zh_cn,
        zh_tw: langs.zh_tw,
        en: langs.en,
        ja: langs.ja,
        ko: langs.ko
    }
})
// 统一使用命名导出
export {
    Captcha as KiteCaptcha,
    ConfigProvider as KiteConfigProvider,
    langs,
    i18n
}

export type CaptchaInstance = InstanceType<typeof Captcha> & unknown
export type ConfigProviderInstance = InstanceType<typeof ConfigProvider> & unknown